import torch  # 导入PyTorch，用于加载保存的模型
from perceptron_model import Perceptron
from net_model import Net

# 单层感知机类模型推理
perceptron_model = 'perceptron_model.pth'  # 定义保存模型参数的文件路径
loaded_params1 = torch.load(perceptron_model, map_location=torch.device('cpu'))  # 使用torch.load函数从文件中载入模型参数
loaded_model_params1 = Perceptron()  # 实例化一个新的单层感知机模型，用于加载模型参数
loaded_model_params1.load_state_dict(loaded_params1)  # 使用load_state_dict函数将载入的参数加载到模型中
loaded_model_params1.eval()  # 将模型设置为评估模式，关闭梯度计算和批归一化等操作

print("使用模型参数载入的单层感知机类模型结构信息：")  # 打印提示信息，表示开始打印载入的模型结构信息
print(loaded_model_params1)
with torch.no_grad():
    x_test1 = torch.tensor([10.0])
    y_test1 = loaded_model_params1(x_test1.unsqueeze(0))
    print(f'测试输入x: {x_test1.item()},', f'测试输出y: {y_test1.squeeze().item():.4f}')

# 多层感知机类模型推理
net_model = 'net_model.pth'  # 定义保存模型参数的文件路径
loaded_params2 = torch.load(net_model, map_location=torch.device('cpu'))  # 使用torch.load函数从文件中载入模型参数
loaded_model_params2 = Net()  # 实例化一个新的多层感知机模型，用于加载模型参数
loaded_model_params2.load_state_dict(loaded_params2)  # 使用load_state_dict函数将载入的参数加载到模型中
loaded_model_params2.eval()  # 将模型设置为评估模式，关闭梯度计算和批归一化等操作

print("使用模型参数载入的多层感知机类模型结构信息：")  # 打印提示信息，表示开始打印载入的模型结构信息
print(loaded_model_params2)
with torch.no_grad():
    x_test2 = torch.tensor([10.0])
    y_test2 = loaded_model_params2(x_test2.unsqueeze(0))
    print(f'测试输入x: {x_test2.item()},', f'测试输出y: {y_test2.squeeze().item():.4f}')
